﻿
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;
namespace Word_Learner_3.Web
{
    　/// <summary>
　/// clsMci 的摘要说明。
　/// </summary>
　public class clsMCI
　{
　　public clsMCI()
　　{
　　　//
　　　// TODO: 在此处添加构造函数逻辑
　　　//
　　}

　　//定义API函数使用的字符串变量 
　　[MarshalAs(UnmanagedType.ByValTStr,SizeConst=260)]
　　private string Name = "" ;
　　[MarshalAs(UnmanagedType.ByValTStr,SizeConst=128)]
　　private string durLength = "" ;
　　[MarshalAs(UnmanagedType.LPTStr,SizeConst=128)]
　　private string TemStr ="";
　　int ilong;
　　//定义播放状态枚举变量
　　public enum State
　　{
　　　mPlaying = 1,
　　　mPuase = 2,
　　　mStop = 3
　　};
　　//结构变量
　　public struct structMCI 
　　{
　　　public bool bMut;
　　　public int iDur;
　　　public int iPos;
　　　public int iVol;
　　　public int iBal;
　　　public string iName;
　　　public State state;
　　};

　　public structMCI mc =new structMCI() ;

　　//取得播放文件属性
　　public string FileName
　　{
　　　get
　　　{
　　　　return mc.iName;
　　　}
　　　set
　　　{
　　　　//ASCIIEncoding asc = new ASCIIEncoding(); 
　　　　try
　　　　{
　　　　　TemStr =""; 
　　　　　TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));
　　　　　Name = Name.PadLeft(260,Convert.ToChar(" ")) ;
　　　　　mc.iName = value; 
　　　　　ilong = APIClass.GetShortPathName(mc.iName,Name, Name.Length);
　　　　　Name = GetCurrPath(Name);
　　　　　//Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";
　　　　　Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";
　　　　　ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length , 0);
　　　　　ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0);
　　　　　ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length , 0);
　　　　　mc.state = State.mStop; 
　　　　}
　　　　catch
　　　　{
     //MessageBox.Show("出错错误!"); 
　　　　}
　　　}
　　}
　　//播放
　　public void play()
　　{
　　　TemStr = "";
　　　TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));
　　　APIClass.mciSendString("play media", TemStr, TemStr.Length , 0);
　　　mc.state = State.mPlaying ;
　　}
　　//停止
　　public void StopT()
　　{
　　　TemStr = "";
　　　TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));
　　　ilong = APIClass.mciSendString("close media", TemStr, 128, 0);
　　　ilong = APIClass.mciSendString("close all", TemStr, 128, 0);
　　　mc.state = State.mStop ; 
　　}

　　public void Puase()
　　{
　　　TemStr = "";
　　　TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));
　　　ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);
　　　mc.state = State.mPuase ; 
　　}
　　private string GetCurrPath(string name)
　　{
　　　if(name.Length <1) return ""; 
　　　name = name.Trim();
　　　name = name.Substring(0,name.Length-1);
　　　return name;
　　}
　　//总时间
　　public int Duration
　　{
　　　get
　　　{
　　　　durLength = "";
　　　　durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;
　　　　APIClass.mciSendString("status media length", durLength, durLength.Length, 0);
　　　　durLength = durLength.Trim();
　　　　if(durLength == "") return 0;
　　　　return (int)(Convert.ToDouble(durLength) / 1000f); 
　　　}
　　}

　　//当前时间
　　public int CurrentPosition
　　{
　　　get
　　　{
　　　　durLength = "";
　　　　durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;
　　　　APIClass.mciSendString("status media position", durLength, durLength.Length, 0);
　　　　mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);
　　　　return mc.iPos;
　　　}
　　}
　}

　public class APIClass
　{
　　[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
　　public static extern int GetShortPathName (
　　　string lpszLongPath,
　　　string shortFile,
　　　int cchBuffer
　　);

　　[DllImport("winmm.dll", EntryPoint="mciSendString", CharSet = CharSet.Auto)]
　　public static extern int mciSendString (
　　　string lpstrCommand,
　　　string lpstrReturnString,
　　　int uReturnLength,
　　　int hwndCallback
　　);
　}
}
    

